package InterviewTest.q0101_isUnique;

public class Solution_2 {
    public static void main(String[] args) {
        int a = 'a';
        System.out.println(a);



    }
    public boolean isUniqueNew(String astr) {
        // 根据题意为字符串，每个字符满足存在ASCII表中，ASCII码的长度为128
        // 而long则是64位的 所以我们如果要按照每个位置代表一个字符是否出现 则需要两个long
        // 设置两个long，将ASCII码分为两部分，分别存储不同字符
        long high64 = 0;
        long low64 = 0;

        for (char c : astr.toCharArray()) {
            if (c > 64) {
                // 由于c > 64, high64的起点为64
                // bitIndex 为char的位置，存在则该位置为1L，1L（表示long）左移 c-64位
                // 此时bitIndex中只有一个1L，即char所在的位置为1L，其他都为0
                long bitIndex = 1L << (c - 64);
                // 如果char的位置上有1，而已有的位置索引也存在1，则说明该数已经出现了，表明存在重复元素
                if ((bitIndex & high64) != 0)
                    return false;
                // 更新high64
                // 将high64与bitIndex的或运算赋值给high64，则此时high64中当前字符的位置也变为1L
                high64 |= bitIndex;
            } else {
                // 同理
                long bitIndex = 1l << c;
                if ((bitIndex & low64) != 0)
                    return false;
                low64 |= bitIndex;
            }
        }
        return true;
    }

}
